const { v4: uuidv4 } = require('uuid');

/**
 * 生成唯一ID
 * @returns {string} 生成的唯一ID
 */
function generateId(num = 20) {
  return uuidv4().replace(/-/g, '').substring(0, num);
}

/**
 * 生成短ID（用于验证码等）
 * @param {number} length - ID长度
 * @returns {string} 生成的短ID
 */
function generateShortId(length = 6) {
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  let result = '';
  for (let i = 0; i < length; i++) {
    result += chars.charAt(Math.floor(Math.random() * chars.length));
  }
  return result;
}
// 生成更复杂且无规律的验证码（8位数字字母组合）
const generateComplexCode = () => {
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  const crypto = require('crypto');
  
  // 使用crypto生成更随机的字节
  const randomBytes = crypto.randomBytes(16);
  let code = '';
  
  // 使用时间戳和随机字节混合生成验证码
  const timestamp = Date.now().toString();
  const mixed = timestamp + randomBytes.toString('hex');
  
  // 从混合字符串中选取字符生成8位验证码
  for (let i = 0; i < 8; i++) {
    const randomIndex = crypto.randomInt(0, mixed.length);
    const char = mixed[randomIndex];
    // 只使用字母和数字
    if (/[A-Za-z0-9]/.test(char)) {
      code += char.toUpperCase();
    } else {
      // 如果不是字母数字，从chars中随机选取
      code += chars[crypto.randomInt(0, chars.length)];
    }
  }
  
  return code;
};
module.exports = {
  generateId,
  generateShortId,
  generateComplexCode
};